home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / share / dos / utilidad / spectrum.arj / SPECTRUM.DOC < prev    next >
Encoding:
Text File  |  1992-02-15  |  17.9 KB  |  405 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                     ▀                       █            ▀
  17.          █▀▀▀▀▀▀▀▀▀ █ █▀▀▀▀▀▀▀▀█ █▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀█ █ █▀▀▀▀▀▀▀▀▀
  18.          ▀▀▀▀▀▀▀▀▀█ █ █        █ █          █ █▀▀▀▀▀▀▀▀█ █ █
  19.          ▀▀▀▀▀▀▀▀▀▀ ▀ ▀        ▀ ▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀ ▀ ▀
  20.          ZX Spectrum           Simulador de Spectrum por Pedro Gimeno
  21.  
  22.  
  23.                             VERSION BETA 0.99B
  24.  
  25. -------------------------------------------------------------------------------
  26. -------------------------------------------------------------------------------
  27.  
  28.  
  29.  
  30.  
  31.                                     INDICE
  32.                                     ------
  33.  
  34.     1.- Introducción.
  35.  
  36.     2.- Teclas y manejo.
  37.  
  38.     3.- Posibilidades que incorpora.
  39.  
  40.     4.- El cassette.
  41.  
  42.     5.- Aspectos técnicos del emulador.
  43.  
  44.     6.- Incompatibilidades.
  45.  
  46.     Apéndices:
  47.     A.  Agradecimientos.
  48.     B.  Forma de contactar con el autor para el envío de sugerencias.
  49.     C.  Historia de versiones.
  50.  
  51.  
  52. 1.- INTRODUCCION
  53.  
  54.       Soy un "vicioso" del Spectrum. Tengo uno de 48K, de teclado de goma, y es
  55. a éste al que debo larguísimas horas de entretenimiento.
  56.  
  57.       Cuando adquirí el PC me planteé cómo mejorar el Spectrum dándole las
  58. prestaciones del PC (disco duro, teclado bueno, monitor claro, impresora
  59. rápida, etc.), pero no di con ninguna solución. Por otra parte, me atraía la
  60. pregunta de cuánto más podría ser el PC de rápido con respecto al Spectrum. Al
  61. fin, en primavera del 89 se me ocurrió la idea de un simulador. Había visto al-
  62. gún C64 con emulador de Spectrum, pero sólo a nivel BASIC. Pensé que no me era
  63. suficiente, pues no funcionarían ni el cinco por ciento de los programas. Te-
  64. nía, además, que simularlo a nivel de código máquina del Z-80.
  65.  
  66.       Empecé con un simulador de Z-80 en Pascal, pero la velocidad dependía de
  67. tantos factores que al fin me decidí a reescribirlo en ensamblador. Hice dos
  68. versiones, a cual más enrevesada. Al fin, me decidí por hacerlo "en plan sal-
  69. vaje": una rutina por cada instrucción, y todas en una tabla. Esto fue en ve-
  70. rano del 89.
  71.  
  72.       La primera versión de algo que tenía posibilidades de funcionar la tuve a
  73. punto en una semana. Pero me faltaba algo: la ROM del Spectrum. Quería que fue-
  74. ra una copia exacta de la existente en el ordenador, pero además echaba de me-
  75. nos el listado fuente. Al fin, me enteré de que un amigo tenía el libro "The
  76. Complete Spectrum ROM Disassembly", de Melbourne House, y se lo pedí.
  77.  
  78.       Dos semanas más me costó teclear todo el librito. Disponía de un ensam-
  79. blador cruzado de Z-80; lo ensamblé, lo comparé con el original, lo corregí, lo
  80. volví a ensamblar y lo probé con el emulador.
  81.  
  82.       ¡Sorpresa la mía! La primera versión hacía algo a la primera. No acababa
  83. de funcionar bien pero afortunadamente eran fallos leves. En poco tiempo estuvo
  84. a punto uno que me permitía ya teclear listados BASIC y demás.
  85.  
  86.       El problema surgió a continuación: ¿Cómo cargar de cassette? Suponía que
  87. dada la variación de velocidad entre PC's (8088, 8086, 80286, etc.) sería impo-
  88. sible siquiera plantearse que el emulador funcionara "de por sí" con cassette.
  89. Y además, ¿por dónde meterlo?
  90.  
  91.       Un amigo mío, que disponía de un osciloscopio, me ayudó a medir la fre-
  92. cuencia exacta y la tensión de mi reproductor de cassette. Resultó ser de unos
  93. cinco voltios a volumen máximo, lo que sugirió que usásemos el puerto paralelo,
  94. que reconocía esa misma señal. Puse a punto una rutina de carga compatible con
  95. las velocidades del Spectrum y modifiqué el emulador de manera que al llegar a
  96. la rutina de carga de la ROM entrase en la mía. Funcionó a la primera. Me fui
  97. corriendo en pos de mi copia del "Manic Miner" y lo cargué.
  98.  
  99.       Desde aquella época, el emulador ha sufrido bastantes modificaciones, to-
  100. das ellas para mejor. Y, actualmente, es lo que es. Se me propuso que lo ven-
  101. diera, con una apetitosa oferta. Al final, decidí lanzarlo al dominio público.
  102.  
  103.       Tengo en mente algunas mejoras adicionales, relativas algunas a la velo-
  104. cidad, otras al joystick y otras a una versión para 386 exclusivamente, que
  105. sacaría partido del mismo. Tal vez en una futura versión del emulador queden
  106. incorporadas.
  107.  
  108.  
  109.                               ** ADVERTENCIA **
  110.  
  111.       Circula una versión inválida e indocumentada del emulador, debida a una
  112. filtración por parte de alguien a quien creía mi amigo. Esa versión aún tiene
  113. por corregir un problema que el emulador manifestaba al salir al sistema, y que
  114. sobreescribe en la zona del D.O.S. pudiendo causar catástrofes imprevistas. Es
  115. aconsejable que deje de utilizarse por completo, en previsión de accidentes.
  116. Además, los ficheros que reconocía no son compatibles con el nuevo formato que
  117. utilizo, más avanzado.
  118.  
  119.  
  120.  
  121. 2.- TECLAS Y MANEJO
  122.  
  123.       Se entra al programa escribiendo SPECTRUM y pulsando ENTER. Opcionalmen-
  124. te puede darse un nombre de un fichero a cargar de disco, con la extensión .SP
  125. por defecto.
  126.  
  127.       Nada más cargarse nos aparece el menú principal. Las opciones en este
  128. punto son:
  129.  
  130.   F1: Entrar en el emulador, o reinicializar la pantalla si ya se está en él,
  131.       o continuar en caso de pausa. Inactivo durante la carga.
  132.   F2: Grabar programa a disco. Inactivo durante la carga.
  133.   F3: Generar NMI. Activo durante la carga.
  134.   F4: Pausa. Inactivo durante la carga.
  135.   F9: Reset. Activo durante la carga.
  136.   F10: Salir del programa. Activo durante la carga.
  137.  
  138.       Para poner en marcha el emulador, pulsar F1. Si se ha cargado un progra-
  139. ma, éste se pondrá en marcha; de lo contrario, arrancará el emulador normalmen-
  140. te. Si se pulsa F4 desde el menú, aparecerá la pantalla del programa cargado,
  141. pero con el emulador parado. Cuando se pulse F1 desde el modo de pausa, conti-
  142. nuará el programa normalmente. Esto está hecho para poder mirar la pantalla de
  143. presentación de algunos programas.
  144.  
  145.       Si pulsamos una tecla que no está activa durante la carga, cuando ésta
  146. termine producirá el efecto deseado. De esta manera, podremos grabar algunos
  147. juegos con pantalla de presentación incluída, si pulsamos F2 mientras el
  148. último bloque está siendo cargado.
  149.  
  150.       Todas las teclas del menú continuarán activas durante la emulación, aun-
  151. que una tendrá un significado ligeramente diferente: F1 servirá para reinicia-
  152. lizar y redibujar la pantalla.
  153.  
  154.       Si se pulsa F2, se grabará el programa que haya actualmente en RAM a dis-
  155. co, con el nombre SNAPnnnn.SP (nnnn es un número de 0001 a 9999). Empieza en
  156. 0001, y si ya existía avanzará al 0002, y así sucesivamente hasta que haya uno
  157. que no exista. Así, la primera vez que pulsemos F2 se grabará con el nombre de
  158. SNAP0001.SP .
  159.  
  160.       Cuando invoquemos después al emulador con SPECTRUM SNAP0001 y Enter,
  161. arrancará en el punto en que estaba al pulsar F2. Si se le quiere dar otro
  162. nombre, utilizar el comando RENAME del DOS para cambiarlo.
  163.  
  164.       La tecla F3 tiene un propósito especial. Es más útil para programadores;
  165. las únicas esperanzas que puede tener un usuario respecto a esta tecla son que
  166. la tecla cause un RESET o que no haga nada en absoluto. Se ha incluído sólo por
  167. si alguien la encuentra útil (p.ej. que haga un COPY de la pantalla a impreso-
  168. ra). Consultar el apartado 4 (Aspectos técnicos del emulador) para más infor-
  169. mación.
  170.  
  171.       Cuando pulsemos F4, el programa que se esté ejecutando, sea cual sea, se
  172. detendrá.
  173.  
  174.       F9 sirve para "resetear" el Z-80; creo que todos sabemos para qué sirve.
  175.  
  176.       Y por último, F10 es para salirse al sistema en el momento que queramos.
  177.  
  178.       MENSAJES DE ERROR.- Los posibles mensajes de error que nos puede dar el
  179. emulador son:
  180.  
  181.       Programa a cargar inválido. Esto quiere decir que el fichero no existe,
  182. o que no se trata de un fichero adecuado para el emulador. El formato de los
  183. ficheros .SP podría ser modificado en futuras versiones, aunque esa posibili-
  184. dad la veo improbable.
  185.  
  186.       Memoria insuficiente. Ocurrirá cuando el emulador no puede reservar los
  187. 64 K. que necesita para simular la zona de memoria del Z-80.
  188.  
  189.       Fichero SPECTRUM.ROM inválido o no encontrado. Este error se producirá si
  190. el emulador no encuentra el fichero SPECTRUM.ROM en el directorio actual, o
  191. bien si éste no tiene exactamente 16384 bytes. En la versión 1.00 el fichero
  192. también se buscará en el directorio desde el que el emulador se cargó.
  193.  
  194.  
  195.       EL TECLADO.- El simulador está preparado para un teclado expandido espa-
  196. ñol. Si no se utiliza uno con estas características, es posible que algunas te-
  197. clas no se correspondan con su función.
  198.  
  199.       La tecla de Mayúsculas desempeña una función especial. Hace que las te-
  200. clas del teclado expandido se correspondan con los caracteres del PC. Así, Ma-
  201. yúsculas + 2 nos da las comillas ("), por ejemplo, y mayúsculas + letra nos da
  202. esa letra en mayúsculas, lógicamente. No es exactamente igual al CAPS SHIFT del
  203. Spectrum.
  204.  
  205.       La función de CAPS SHIFT la tiene la tecla CTRL del PC. Esta sí que se
  206. corresponde exactamente con la del Spectrum; así, CTRL + 2 nos pone en modo de
  207. CAPS LOCK, como si en el Spectrum hubiésemos pulsado CAPS SHIFT + 2.
  208.  
  209.       Y la función de SYMBOL SHIFT la da la tecla ALT. También se corresponde
  210. exactamente con la del Spectrum. Así, ALT + A nos da la palabra STOP. En este
  211. caso sirven igualmente el ALT normal y el ALT GRáfico.
  212.  
  213.       Actualmente, las teclas de cursor no tienen ningún efecto, aunque en el
  214. futuro pienso darles el significado que tiene el JOYSTICK tipo KEMPSTON.
  215.  
  216.       La tecla TAB sirve para activar el modo extendido (equivale a CAPS SHIFT
  217. + SYMBOL SHIFT).
  218.  
  219.       La tecla rotulada con (º) equivale a EDIT (CAPS SHIFT + 1).
  220.  
  221.       La tecla ESC nos lleva al menú de nuevo, por si queremos consultar las
  222. opciones de que disponemos.
  223.  
  224.       El resto de teclas son los caracteres que figuran en la tecla, allá
  225. donde ha sido posible hacerlo.
  226.  
  227.  
  228. 3.- POSIBILIDADES QUE INCORPORA
  229.  
  230.       - Manejo de cassette y simulación de impresora tipo ZX-PRINTER.
  231.       - Correspondencia del teclado PC con el teclado Spectrum.
  232.       - Posibilidad de grabar el programa en disco y volverlo a cargar poste-
  233. riormente.
  234.       - Funciona con adaptadores EGA y VGA.
  235.       - Posibilidad de ejecutar la mayoría de programas del ZX Spectrum.
  236.       - Control de RESET y NMI del Z-80 mediante teclas de función.
  237.  
  238.  
  239.  
  240. 4.- EL CASSETTE
  241.  
  242.       Para hacer el cable de cassette, se necesitan:
  243.  
  244.       - Un conector macho de 25 pines en D (el que tiene normalmente un cable
  245. paralelo por el lado que se conecta al PC).
  246.       - Cable apantallado (malla y vivo).
  247.       - Un conector JACK de 1.5 mm. (el que usamos para conectar al cassette).
  248.       - Soldador y estaño.
  249.  
  250.       La malla del cable se debe soldar a una pata entre la 18 y la 25, y por
  251. el lado del JACK a la masa (parte grande). El vivo ha de soldarse a la pata 13,
  252. y por el lado del JACK al central (parte pequeña). He aquí un esquema (por el
  253. lado de las soldaduras) del conector paralelo:
  254.         vivo
  255.       ___│___________________________________________________
  256.   13  \  o   .   .   .   .   .   .   .   .   .   .   .   .  / 1
  257.        \   o   .   .   .   .   .   .   .   .   .   .   .   /
  258.      25 \__│______________________________________________/ 14
  259.            │
  260.          malla
  261.  
  262.  
  263.                         ******** IMPORTANTE ********
  264.  
  265.       Mi cassette da los 5 voltios casi exactos a máximo volumen. Por debajo de
  266. dicha tensión, el puerto paralelo también funciona. No creo recomendable utili-
  267. zar el cassette a máximo volumen, porque sería poner en peligro el interface
  268. paralelo del PC si da más de 5 voltios. UN TESTER NO ES SUFICIENTE PARA MEDIR
  269. EL VOLTAJE DEL CASSETTE.
  270.  
  271.  
  272. 5.- ASPECTOS TECNICOS DEL EMULADOR
  273.  
  274.       Funcionará en tarjetas EGA 100% compatibles y en VGA. Si se utiliza con
  275. este último adaptador de video, los colores saldrán más naturales, pero el bor-
  276. de de la pantalla no se rellenará por completo.
  277.  
  278.       Mientras el emulador está en marcha, el reloj del PC no se actualiza. Al
  279. salir del emulador, éste lee la hora del reloj CMOS de tiempo real y la asigna
  280. como hora del sistema. Si el equipo es un PC-XT o inferior (?) la fecha y hora
  281. del sistema al salir se perderán.
  282.  
  283.       Para que el emulador vaya a una velocidad aceptable, debe correr en un
  284. PC-AT o compatible con procesador 80386 a 25 MHz con sistema caché, o bien a
  285. 33 MHz sin él. En un equipo 286, la velocidad no llega a ser la suficiente como
  286. para poder compararse a la del Spectrum.
  287.  
  288.       El cambio de color del borde provoca inevitablemente la aparición de una
  289. pequeña raya en la pantalla. Esto se debe a que se cambia de color mediante la
  290. actualización de la paleta de colores, y el controlador de vídeo y la CPU no
  291. pueden acceder simultáneamente a los registros de paleta. Este efecto se nota
  292. más durante la carga de un programa, o con juegos que hagan efectos con el bor-
  293. de.
  294.  
  295.       Puede que alguien se pregunte por qué entonces cuando cambia la paleta
  296. mediante las funciones al respecto, no aparece esa raya. La respuesta es que el
  297. BIOS del PC se espera a que la pantalla llegue a un retrazado vertical (Verti-
  298. cal Retrace) para actualizarlo, lo que supone un retardo que durante la emula-
  299. ción no se puede permitir.
  300.  
  301.       La rutina de carga de cassette es ligeramente diferente a la de un Spec-
  302. trum normal. Está preparada para que sea cual sea la velocidad del ordenador
  303. (la he probado incluso en un PC-XT a 4.77 MHz) funcione a 1500 baudios (un pul-
  304. so de 1000 Hz. para los bits 0 y de 2000 Hz. para los bits 1) con el tono guía
  305. de 800 Hz.
  306.  
  307.       Se nota la diferencia porque el borde, en lugar de parpadear, está sacan-
  308. do rayas como si se tratara del tono guía. En realidad, esas rayas no signifi-
  309. can que esté leyendo nada; cuando el tono guía empieza a sonar, las rayas salen
  310. un poco más estrechas.
  311.  
  312.       El puerto de E/S 254 (FEh) es, como cabe esperar en un Spectrum, el que
  313. se ocupa en escritura de actualizar el borde y el altavoz, y en lectura de leer
  314. el teclado y el puerto paralelo (cassette), si bien la rutina de carga que he
  315. preparado no efectúa una lectura por dicho puerto.
  316.  
  317.       El puerto 251 (FBh) actúa sobre la impresora. Si bien no lo hace de mane-
  318. ra idéntica a un Spectrum, sí es cierto que tal y como funciona la rutina ROM
  319. de impresora del mismo lo hace bien.
  320.  
  321.       Actualmente está preparado para funcionar con impresoras IBM y EPSON que
  322. permitan gráficos.
  323.  
  324.       Al menos en esta versión, ningún otro puerto E/S hace nada.
  325.  
  326.       El simulador de Z-80 hace lo que puede con las instrucciones no documen-
  327. tadas por Zilog. La instrucción SLL r (códigos de operación 203 48 a 203 55)
  328. hace lo mismo que la SLA r (códigos 203 32 a 203 39). Reconoce el IN fantasma
  329. con código 237 112 y actualiza los flags en consecuencia. Todas las instruc-
  330. ciones normales o con prefijo 203 (CBh) que tenían además el prefijo IX (221,
  331. DDh) ó IY (253, FDh) y que afectan al registro H o L, operan en su lugar con
  332. el byte alto o bajo de IX (XH ó XL) ó IY (YH ó YL).
  333.  
  334.       Un dato para curiosos: el resultado de Prefijo_IX + Prefijo_CB + Despla-
  335. zamiento + Instrucción_con_prefijo_CB, donde esta última no tiene como operan-
  336. do a (HL), tiene en el auténtico Z-80 unos resultados imprevisibles.
  337.  
  338.       Si algún programa se vale del registro R de refresco con un fin que no
  339. sea obtener un número aleatorio, no conseguirá su propósito.
  340.  
  341.       El modo 0 de interrupciones (IM 0) no funciona. Sólo funcionan los modos
  342. 1 (RST 56) y 2 (llamada a la dirección dada por el registro I como byte alto y
  343. el valor 255 como byte bajo).
  344.  
  345.       La pantalla no se actualiza cuando se produce un CALL, un RESTART (RST)
  346. o una interrupción y el registro SP apunta a una dirección entre la 4000h y la
  347. 5AFFh (Display File). Tampoco es actualizada por la instrucción EX (SP),HL ni
  348. por las instrucciones INI, IND, INIR ni INDR. Se ha considerado innecesario y
  349. práctico por cuestiones de velocidad.
  350.  
  351.  
  352. 6. INCOMPATIBILIDADES (conocidas).
  353.  
  354.       La gestión de vídeo es incompatible con el gestor de dispositivo EGA.SYS
  355. de Windows. El emulador se quedará totalmente bloqueado si se cargan conjun-
  356. tamente.
  357.  
  358.  
  359. APENDICE A. AGRADECIMIENTOS.
  360.  
  361.       Estoy muy agradecido a Alejandro Valero por su contribución con ideas de
  362. cara a acelerar lo que antes era más lento todavía, sobre todo en el tema del
  363. vídeo.
  364.  
  365.       A Diego Hernández, por la ayuda técnica referente al interface con el
  366. cassette.
  367.  
  368.       A José María Badía, Sysop de EXOLON BBS, encargado de la difusión en
  369. exclusiva del emulador.
  370.  
  371.       A todos los usuarios que desde el lanzamiento de la versión 0.99A hasta
  372. ahora han contribuído con sugerencias y avisos sobre errores, que son muchos.
  373.  
  374.       Y a Sir Clive Sinclair, por haber creado una máquina tan divertida.
  375.  
  376.  
  377. APENDICE B. COMO CONTACTAR CON EL AUTOR.
  378.  
  379.       Por MODEM, a través de cualquier BBS perteneciente a la WWIV LINK, en un
  380. mensaje dirigido al usuario #3 (Manivelo) del nodo @32134 (EXOLON BBS) de la
  381. red. Para conseguir la última versión disponible y libre de virus, llamar a
  382. EXOLON BBS. Sysop: José María Badía. Teléfono: (96) 248 0621.
  383.  
  384.       Permitidme recordar que esta versión del emulador es una versión Beta (de
  385. pruebas, para comentar con los usuarios los posibles fallos). Ruego a todos que
  386. me hagáis saber de cualquier error ("bug") que encontréis en el emulador, así
  387. como cualquier sugerencia que se os ocurra hacerme al respecto.
  388.  
  389.  
  390. APENDICE C. HISTORIA DE VERSIONES.
  391.  
  392.     0.99A (Beta): Primera versión lanzada al público.
  393.  
  394.     0.99B (Beta): Corregidos errores en NMI y la actualización de la pantalla
  395. por las instrucciones RLD y RRD de Z80, las cuales, además, han sido mejora-
  396. das. Modificada la acción de ciertas teclas al pulsarlas durante la carga.
  397.  
  398.     0.99C (Beta): Algunas VGA's tienen serios problemas para mantener las 200
  399. líneas de barrido que precisa el Emulador si se redefine el juego de caracte-
  400. res. No es culpa mía, sino del BIOS de las tarjetas; corregido el error. Arre-
  401. glado el gestor de interrupciones Z80, que no las desactivaba antes de llamar-
  402. las. Así, juegos como el AQUAPLANE funcionan en ordenadores en los que antes
  403. no lo hacían (por no tener tiempo de acabar la interrupción antes de que em-
  404. pezara la otra).
  405.